home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-09-12 | 5.0 KB | 195 lines | [TEXT/PJMM] |
- unit Settings;
-
- interface
- uses
- {$IFC UNDEFINED THINK_PASCAL}
- Types, QuickDraw, Fonts, Events, Packages, Menus, Dialogs, Windows,{}
- OSUtils, ToolUtils, Resources,
- {$ELSEC}
- InterfacesUI,
- {$ENDC}
- SAT, SettingsStubs;
-
- var
- settings: SettingsHnd;
-
- procedure InitSettings (prefFile: Integer);
- procedure SaveSettings;
- procedure DoKeySettingsDialog;
-
- implementation
-
- var
- keycode: array[1..kNumKeys] of integer;
- gPrefFile: Integer; {prefFile for internal use}
-
- function StdFilter (theDialog: DialogPtr; var theEvent: EventRecord; var itemHit: integer): boolean;
- var
- theChar: Char;
- kind: integer;
- item: Handle;
- box: Rect;
- begin
-
- if theEvent.what = updateEvt then
- begin
- BeginUpdate(theDialog);
- SetPort(theDialog);
-
- DrawDialog(theDialog);
-
- {Frame button}
- GetDialogItem(theDialog, ok, kind, item, box);
- InsetRect(box, -4, -4);
- PenSize(3, 3);
- FrameRoundRect(box, 15, 15);
-
- StdFilter := false;
-
- EndUpdate(theDialog);
- end;
-
- if theEvent.what = keyDown then
- begin
- theChar := Char(BitAnd(theEvent.message, charCodeMask));
- if ((BitAnd(theEvent.modifiers, cmdkey) <> 0) and (theChar = '.')) or (theChar = char(27)) then {cmd-. eller ESC}
- {if TestDItemEnable(theDialog, cancel) then}
- begin
- itemHit := cancel;
- {MÃ¥ste jag highlighta till keyup?}
-
- GetDialogItem(theDialog, cancel, kind, item, box);
- HiliteControl(ControlHandle(item), 1);
-
- StdFilter := true;
- exit(StdFilter);
- end;
- if (theChar = char(13)) or (theChar = char(3)) then
- {if TestDItemEnable(theDialog, ok) then}
- begin
- itemHit := ok;
- GetDialogItem(theDialog, ok, kind, item, box);
- HiliteControl(ControlHandle(item), 1);
- StdFilter := true;
- exit(StdFilter);
- end;
- end;
- StdFilter := false;
- end; {StdFilter}
-
- function KeysFilter (theDialog: DialogPtr; var theEvent: EventRecord; var itemHit: integer): boolean;
- var
- item: Integer;
- theKeyNumber: Integer;
- begin
- if BitAnd(theEvent.modifiers, cmdkey) <> 0 then
- KeysFilter := StdFilter(theDialog, theEvent, itemHit)
- else if theEvent.what <> keyDown then
- KeysFilter := StdFilter(theDialog, theEvent, itemHit)
- else if BitAnd(theEvent.message, charCodeMask) = 3 then {Enter}
- KeysFilter := StdFilter(theDialog, theEvent, itemHit)
- else if BitAnd(theEvent.message, charCodeMask) = 13 then {Return}
- KeysFilter := StdFilter(theDialog, theEvent, itemHit)
- else if BitAnd(theEvent.message, charCodeMask) = 9 then {TAB}
- KeysFilter := StdFilter(theDialog, theEvent, itemHit)
- else if BitAnd(theEvent.message, charCodeMask) = 27 then {ESC}
- KeysFilter := StdFilter(theDialog, theEvent, itemHit)
- else
- begin
- theKeyNumber := BSR(BitAnd(theEvent.message, keyCodeMask), 8);
- if IsDialogEvent(theEvent) then
- if DialogSelect(theEvent, theDialog, item) then
- begin
- itemHit := item;
- KeysFilter := true;
- keycode[itemHit + 1 - kFirstKeyItem] := theKeyNumber;
- SelectDialogItemText(theDialog, itemHit, 0, 32767);
- end;
- end;
- end;
-
- procedure DoKeySettingsDialog;
- var
- dialog: DialogPtr;
- oldPort: SATPort;
- itemHit: integer;
- km: KeyMap;
- i: integer;
- found: Boolean;
- kind: integer;
- item: Handle;
- box: Rect;
- tmpStr: Str255;
- begin
- SATGetPort(oldPort);
- SATSetPortScreen;
- dialog := GetNewDialog(kKeysDlogRes, nil, WindowPtr(-1));
-
- for i := 1 to kNumKeys do
- begin
- GetDialogItem(dialog, i - 1 + kFirstKeyItem, kind, item, box);
- SetDialogItemText(item, StringOf(settings^^.key[i]));
- keycode[i] := settings^^.keyCode[i];
- end;
-
- SelectDialogItemText(dialog, kFirstKeyItem, 0, 32767);
-
- ShowWindow(dialog);
- SelectWindow(dialog);
- if gSAT.colorFlag then
- SetGDevice(GetMainDevice);
- SetPort(dialog);
-
- repeat { 1=ok, 2=cancel }
- ModalDialog(@KeysFilter, itemHit);
- if itemHit > cancel then
- SelectDialogItemText(dialog, itemHit, 0, 32767);
- until (itemHit = ok) or (itemHit = cancel);
-
- if itemHit = ok then
- begin
- for i := 1 to kNumKeys do
- begin
- settings^^.keyCode[i] := keycode[i];
- GetDialogItem(dialog, i - 1 + kFirstKeyItem, kind, item, box);
- GetDialogItemText(item, tmpStr);
- settings^^.key[i] := tmpStr[1];
- end;
- ChangedResource(Handle(settings));
- end;
-
- DisposeDialog(dialog);
- SATSetPort(oldPort);
- end; {DoKeySettingsDialog}
-
-
-
- procedure InitSettings (prefFile: Integer);
- var
- i, j: integer;
- saveResFile: Integer;
- begin
- saveResFile := CurResFile;
- UseResFile(prefFile);
- gPrefFile := prefFile; {save the refnum internally}
-
- settings := SettingsHnd(Get1Resource('Sett', 1));
- if settings = nil then
- begin
- settings := SettingsHnd(NewHandle(sizeof(SettingsRec)));
- {Init fields here}
- AddResource(Handle(settings), 'Sett', 1, 'Inställningar');
- end
- else if GetHandleSize(Handle(settings)) < SizeOf(SettingsRec) then
- SetHandleSize(Handle(settings), SizeOf(SettingsRec));
-
- UseResFile(saveResFile);
- end; {InitSettings}
-
- procedure SaveSettings;
- begin
- ChangedResource(Handle(settings));
- UpdateResFile(gPrefFile);
- end; {SaveSettings}
-
- end.